#pragma once

#include "View/View.hpp"
#include "Observer/Observer.hpp"
#include "Data/CurveData.hpp"

/** @class CurveView
  * @brief Графическое представление кривой
  */
class CurveView : public View, public Observer
{
private:
    CurveData* m_data;

public:
    /**
      * Конструктор
      *
      * @param gs Объект Graphics, используемый для низкоуровневых операций рисования
      * @param data Данные для отрисовки
      */
    CurveView(Graphics *gs, CurveData* data);

    /**
      * Обновить вид
      */
    virtual void update();

    /**
      * Нарисовать себя
      */
    virtual void draw();

    /**
      * Определить, есть ли пересечение с точкой
      *
      * @param x Абсцисса точки
      * @param y Ордината точки
      */
    virtual bool intersects(const double x, const double y);

    /**
      * Определить свои границы
      *
      * @param x1 Абсцисса левой верхней точки описанного прямоугольника
      * @param y1 Ордината левой верхней точки описанного прямоугольника
      * @param x2 Абсцисса правой нижней точки описанного прямоугольника
      * @param y2 Ордината правой нижней точки описанного прямоугольника
      */
    virtual void bounds(double &x1, double &y1, double &x2, double &y2);

    /**
      * Деструктор
      */ 
    virtual ~CurveView();
};

